from bs4 import BeautifulSoup

soup = BeautifulSoup(open('bs4 的基本使用.html', encoding='utf-8'), 'lxml')
# print(soup)

# 根据标签名查找节点
# 找到的是第一个符合条件的数据
print(soup.a)
# attrs 获取标签的属性和属性值
print(soup.a.attrs)

# bs4 的一些函数
# 1. find:返回第一个符合条件的
print(soup.find('a'))
# 根据属性值来匹配对应的标签
print(soup.find('a', title='a2'))

# 根据 class 的值来找到对应的标签对象
print(soup.find('a', class_="a1"))

# 2.find_all : 以列表的形式返回所有的标签
print(soup.find_all('a'))

# 通过列表的形式查询多个标签
print(soup.find_all(['a', 'span']))

# limit 限制查询的数据量, 以列表的形式返回
print(soup.find_all('li', limit=2))
# 获取指定的数据 包头不包尾
print(soup.find_all('li')[0:2])

# 3.select 推荐
print("*"*30)
print('select')
# 查询指定标签返回一个列表
print(soup.select('a'))
# . 代表类选择器
print(soup.select('.a1'))
# # 代表 id 选择器
print(soup.select('#a1'))

# 属性选择器  --> 通过属性来寻找对应的标签
# 查找到 li 标签中有 id 的标签
print('属性选择器')
print(soup.select('li[id]'))

# 查找到 li 中 id 为 l2 的标签
print(soup.select('li[id="l2"]'))

# 层级选择器
print('层级选择器')
# 后代选择器
print(soup.select('div li'))

# 子代选择器
# 某标签的第一级子标签
print(soup.select('div > ul > li'))
# 查询所有的标签
print(soup.select('a,li'))

# 节点信息
# 获取节点内容
obj = soup.select('#d1')[0]
# 如果标签中 只有内容 那么 string 和 get_text() 都可以使用
# 如果标签中除了内容还有标签那么 string 就获取不到数 而 get_text() 是可以获取到数据的
# 我们一般情况下都推荐使用  get_text()
print(obj.string)
print(obj.get_text())

# 节点属性
obj = soup.select('#p1')[0]
# name 是标签的名称
print(obj.name)
# 将属性值作为一个字典返回
print(obj.attrs)

# 获取节点的属性
print('获取属性')
obj = soup.select('#p1')[0]
print(obj.attrs.get("class"))
print(obj.get("class"))
print(obj["class"])




